import firedrake
/home/firedrake/firedrake/lib/python3.10/site-packages/pytools/__init__.py:2428: UserWarning: unable to find git revision
warn("unable to find git revision")
/home/firedrake/firedrake/src/loopy/loopy/schedule/__init__.py:2201: UserWarning: pytools.persistent_dict 'loopy-schedule-cache-v4-2024.1-islpy2024.1-cgen2020.1-967461ba9c3677ee6f0334b9ee95ef0f0e51d208-v1': enabling safe_sync as default. This provides strong protection against data loss, but can be unnecessarily expensive for use cases such as caches.Pass 'safe_sync=False' if occasional data loss is tolerable. Pass 'safe_sync=True' to suppress this warning.
schedule_cache = WriteOncePersistentDict(
/home/firedrake/firedrake/src/loopy/loopy/tools.py:914: UserWarning: pytools.persistent_dict 'loopy-memoize-cache-buffer_array-LoopyKeyBuilder.LoopyKeyBuilder-v0-2024.1-islpy2024.1-cgen2020.1-967461ba9c3677ee6f0334b9ee95ef0f0e51d208-v1': enabling safe_sync as default. This provides strong protection against data loss, but can be unnecessarily expensive for use cases such as caches.Pass 'safe_sync=False' if occasional data loss is tolerable. Pass 'safe_sync=True' to suppress this warning.
transform_cache = WriteOncePersistentDict(
/home/firedrake/firedrake/src/loopy/loopy/tools.py:914: UserWarning: pytools.persistent_dict 'loopy-memoize-cache-preprocess_program-LoopyKeyBuilder.LoopyKeyBuilder-v0-2024.1-islpy2024.1-cgen2020.1-967461ba9c3677ee6f0334b9ee95ef0f0e51d208-v1': enabling safe_sync as default. This provides strong protection against data loss, but can be unnecessarily expensive for use cases such as caches.Pass 'safe_sync=False' if occasional data loss is tolerable. Pass 'safe_sync=True' to suppress this warning.
transform_cache = WriteOncePersistentDict(
/home/firedrake/firedrake/src/loopy/loopy/codegen/__init__.py:313: UserWarning: pytools.persistent_dict 'loopy-code-gen-cache-v3-2024.1-islpy2024.1-cgen2020.1-967461ba9c3677ee6f0334b9ee95ef0f0e51d208-v1': enabling safe_sync as default. This provides strong protection against data loss, but can be unnecessarily expensive for use cases such as caches.Pass 'safe_sync=False' if occasional data loss is tolerable. Pass 'safe_sync=True' to suppress this warning.
code_gen_cache = WriteOncePersistentDict(
/home/firedrake/firedrake/src/loopy/loopy/target/execution.py:724: UserWarning: pytools.persistent_dict 'loopy-typed-and-scheduled-cache-v1-2024.1-islpy2024.1-cgen2020.1-967461ba9c3677ee6f0334b9ee95ef0f0e51d208-v1': enabling safe_sync as default. This provides strong protection against data loss, but can be unnecessarily expensive for use cases such as caches.Pass 'safe_sync=False' if occasional data loss is tolerable. Pass 'safe_sync=True' to suppress this warning.
typed_and_scheduled_cache = WriteOncePersistentDict(
/home/firedrake/firedrake/src/loopy/loopy/target/execution.py:732: UserWarning: pytools.persistent_dict 'loopy-invoker-cache-v10-2024.1-islpy2024.1-cgen2020.1-967461ba9c3677ee6f0334b9ee95ef0f0e51d208-v1': enabling safe_sync as default. This provides strong protection against data loss, but can be unnecessarily expensive for use cases such as caches.Pass 'safe_sync=False' if occasional data loss is tolerable. Pass 'safe_sync=True' to suppress this warning.
invoker_cache = WriteOncePersistentDict(
import viskex
import common_firedrake as common # isort: skip
Generate meshes of the unit square by dividing each edge of the square in 6 segments, using either a triangular or quadrangular mesh.
square_tria = firedrake.UnitSquareMesh(6, 6, quadrilateral=False, diagonal="right")
square_quad = firedrake.UnitSquareMesh(6, 6, quadrilateral=True, diagonal="right")
Mark subdomains according to the $(x, y)$ position of the vertices of the mesh:
square_tria_with_subdomains = common.mark_subdomains(square_tria)
square_quad_with_subdomains = common.mark_subdomains(square_quad)
We plot the resulting subdomains.
viskex.firedrake.plot_mesh_sets(square_tria_with_subdomains, 2, "subdomains")
viskex.firedrake.plot_mesh_sets(square_quad_with_subdomains, 2, "subdomains")
We can also plot all subdomains that belong to the mesh set $2$, which will be displayed with colors. The rest of the mesh cells are still included in the plot, but are colored in gray.
viskex.firedrake.plot_mesh_sets(
square_tria_with_subdomains, 2, "subdomains_2", viskex.utils.values_in([2]))
viskex.firedrake.plot_mesh_sets(
square_quad_with_subdomains, 2, "subdomains_2", viskex.utils.values_in([2]))
Alternatively, we can clip the plot so that it only shows the subset of the mesh with subdomain set equal to $2$.
viskex.firedrake.plot_mesh_sets(
square_tria_with_subdomains, 2, "subdomains_2",
lambda grid: grid.threshold(2)) # type: ignore[no-untyped-call]
viskex.firedrake.plot_mesh_sets(
square_quad_with_subdomains, 2, "subdomains_2",
lambda grid: grid.threshold(2)) # type: ignore[no-untyped-call]
The mesh sets are stored as part of the firedrake mesh object. If the mesh sets get removed, all cells will be displayed in gray in the plot.
square_tria.topology_dm.removeLabel(firedrake.cython.dmcommon.CELL_SETS_LABEL)
square_quad.topology_dm.removeLabel(firedrake.cython.dmcommon.CELL_SETS_LABEL)
viskex.firedrake.plot_mesh_sets(square_tria, 2, "subdomains")
/home/firedrake/firedrake/lib/python3.10/site-packages/pyvista/plotting/mapper.py:670: RuntimeWarning: All-NaN axis encountered clim = [np.nanmin(scalars), np.nanmax(scalars)]
viskex.firedrake.plot_mesh_sets(square_quad, 2, "subdomains")
/home/firedrake/firedrake/lib/python3.10/site-packages/pyvista/plotting/mapper.py:670: RuntimeWarning: All-NaN axis encountered clim = [np.nanmin(scalars), np.nanmax(scalars)]